#include "BonusReducirVelocidadOponente.h"
#include "Pacman.h"
#include "EscenarioModelo.h"
#include "Juego.h"

BonusReducirVelocidadOponente::BonusReducirVelocidadOponente(Punto* unPunto,unsigned int unRadio, bool vivo) : BonusModel(unPunto,unRadio,vivo){
}

void BonusReducirVelocidadOponente::colisionarConPacman(ObjetoVivo* unObjetoVivo) {
    
    Pacman* pacman = (Pacman*)unObjetoVivo;
    Pacman* pacmanEnemigo;

    if(EscenarioModelo::getEscenario()->getPacmanJugador1() == pacman){
        pacmanEnemigo = EscenarioModelo::getEscenario()->getPacmanJugador2(); 
    }else{
        pacmanEnemigo = EscenarioModelo::getEscenario()->getPacmanJugador1(); 
    }

    pacmanEnemigo->getEstrategiaMovimiento()->setVelocidad(0.5*pacmanEnemigo->getEstrategiaMovimiento()->getVelocidad());

    Uint32* argumentos = new Uint32[2];
    memcpy(&argumentos[0],&(this->duracionEfecto),sizeof(Uint32));
    memcpy(&argumentos[1],&pacmanEnemigo,sizeof(Uint32));
    SDL_Thread* thread = SDL_CreateThread(BonusReducirVelocidadOponente::volverAVelocidadOriginal, argumentos);
	
	// Se agrega el thread a la lista de thread para luego terminarlo si queda vivo.
	Juego::listaThreads->agregar(thread);
	
	
	this->matar();
}

int BonusReducirVelocidadOponente::volverAVelocidadOriginal(void* data){
    
    Uint32* arreglo = (Uint32*)data;

    Uint32 delay = (Uint32)arreglo[0];
    Pacman* pacman = (Pacman*)arreglo[1];
    SDL_Delay(delay);

    if(pacman && pacman->getEstrategiaMovimiento())
		pacman->getEstrategiaMovimiento()->volverAVelocidadOrigonal();
    
	delete[] arreglo;

    return 0;    
}

void BonusReducirVelocidadOponente::colisionarConFantasma(ObjetoVivo* unObjetoVivo) {


}

BonusReducirVelocidadOponente::~BonusReducirVelocidadOponente(void){
    
}
